package com.learn.redis.singin;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * @author : 翌擎科技
 * @date : 2022/10/9 17:46
 */
public interface UserSignInService {

    /**
     * 签到
     * @param userId 用户Id
     * @param localDate 签到日期
     */
    void signIn(String userId, LocalDate localDate);

    /**
     * 取消签到
     * @param userId 用户Id
     * @param localDate 签到日期
     */
    void cancelSignIn(String userId, LocalDate localDate);

    /**
     *检查是否签到
     * @param userId 用户Id
     * @param localDate 签到日期
     * @return
     */
    Boolean checkSignIn(String userId, LocalDate localDate);

    /**
     * 获取指定日期连续签到次数
     * @param userId 用户Id
     * @param localDate 签到日期
     * @return
     */
    long getContinuousSignInCount(String userId, LocalDate localDate);

    /**
     * 获取当月第一次签到日期
     * @param userId 用户Id
     * @param localDate 签到日期
     * @return
     */
    LocalDate getFirstSignMonth(String userId, LocalDate localDate);

    /**
     * 获取当月签到情况
     * @param userId 用户Id
     * @param localDate 签到日期
     * @return 当月签到情况
     */
    Map<String,Boolean> getSignMonth(String userId, LocalDate localDate);

    /**
     * 订阅签到提醒
     * @param userId
     */
    void subscribeSignInTip(String userId);

    /**
     * 取消订阅签到提醒
     * @param userId
     */
    void unSubscribeSignInTip(String userId);

    /**
     * 检查是否订阅
     * @param userId
     * @return
     */
    Boolean checkSubscribeSignInTip(String userId);

    /**
     * 获取未签到的订阅用户
     * @return
     */
    List<String> getUnSignInSubscribers(LocalDate localDate);


}
